import Foundation
import SwiftUI

class ImageHelper {
    static let shared = ImageHelper()
    
    private init() {}
    
    // 图片域名缓存
    private var imgHost: String = ""
    private var presetImgHost: String = ""
    
    // 设置图片域名
    func setImageHost(_ host: String) {
        self.imgHost = host
        self.presetImgHost = host
    }
    
    // 获取预设图片域名
    var presetImgDomain: String {
        // 如果预设域名存在，使用预设域名
        if !presetImgHost.isEmpty {
            return presetImgHost
        }
        
        // 如果imgHost是完整URL（包含http/https），则不使用，避免重复拼接
        if imgHost.hasPrefix("http://") || imgHost.hasPrefix("https://") {
            return ""
        }
        
        // 否则使用imgHost
        return imgHost
    }
    
    // 获取预设图片完整URL
    func getPresetImageUrl(_ path: String?) -> String {
        guard let path = path, !path.isEmpty else { return "" }
        
        // 如果路径已经是完整URL，直接返回
        if path.hasPrefix("http://") || path.hasPrefix("https://") {
            return path
        }
        
        // 拼接预设图片域名
        return presetImgDomain + path
    }
    
    // 获取完整图片URL
    func getImageUrl(_ path: String?) -> String {
        guard let path = path, !path.isEmpty else { return "" }
        
        // 如果路径已经是完整URL，直接返回
        if path.hasPrefix("http://") || path.hasPrefix("https://") {
            return path
        }
        
        // 拼接图片域名
        return imgHost + path
    }
    
    // 检查是否为本地图片资源
    func isLocalImage(_ imageName: String) -> Bool {
        // 检查是否为本地资源（不包含路径分隔符且不是URL）
        return !imageName.contains("/") && 
               !imageName.hasPrefix("http://") && 
               !imageName.hasPrefix("https://")
    }
}

// SwiftUI Image扩展，支持网络图片和本地图片
extension Image {
    static func networkImage(url: String) -> some View {
        AsyncImage(url: URL(string: url)) { image in
            image
                .resizable()
                .aspectRatio(contentMode: .fit)
        } placeholder: {
            Rectangle()
                .fill(Color.gray.opacity(0.3))
        }
    }
    
    static func networkImage<Content: View, Placeholder: View>(
        url: String,
        @ViewBuilder content: @escaping (Image) -> Content,
        @ViewBuilder placeholder: @escaping () -> Placeholder
    ) -> some View {
        AsyncImage(url: URL(string: url)) { phase in
            switch phase {
            case .success(let image):
                content(image)
            case .failure(_), .empty:
                placeholder()
            @unknown default:
                placeholder()
            }
        }
    }
    
    static func smartImage(_ imagePath: String?, placeholder: String = "placeholder") -> some View {
        if let imagePath = imagePath {
            if ImageHelper.shared.isLocalImage(imagePath) {
                // 本地图片
                return AnyView(Image(imagePath)
                    .resizable()
                    .aspectRatio(contentMode: .fit))
            } else {
                // 网络图片
                let fullUrl = ImageHelper.shared.getImageUrl(imagePath)
                return AnyView(AsyncImage(url: URL(string: fullUrl)) { image in
                    image
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                } placeholder: {
                    Image(placeholder)
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                })
            }
        } else {
            // 占位符
            return AnyView(Image(placeholder)
                .resizable()
                .aspectRatio(contentMode: .fit))
        }
    }
}